Timelineを使用する上でPlayableDirector Componentが必須になります このComponentが何をやっているか確認します
概要
タイムラインアセットを再生、更新、停止、イベント発火を担うコンポーネント つまりタイムラインを動かすために必要なものとなります
サンプルとしてUnity公式が公開している Dragon Crashers - 2D Sample Project を見てみます
Sceen_Game_Menuシーンを開いて、その中にある
Timeline_FradeFromBlack
を見てみます
Timline_FradeFromBlackを管理しているのが親にある Screen Fader Manager
CutsceneTimelineBehaviour をアタッチされていますが、中身を見ると単に PlayableDirector の Play を呼び出しています
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Events;
public class CutsceneTimelineBehaviour : MonoBehaviour
{
[Header("Timeline")]
public PlayableDirector cutsceneTimeline;
[Header("Marker Events")]
public UnityEvent cutsceneTimelineFinished;
public void StartTimeline()
{
cutsceneTimeline.Play();
}
public void TimelineFinished()
{
cutsceneTimelineFinished.Invoke();
}
}
管理者は適切なタイミングで StartTimlineを呼び出しているだけですね
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Events;
public class ScreenFaderManager : MonoBehaviour
{
[Header("Sequences")]
public CutsceneTimelineBehaviour fadeFromBlackTimeline;
public CutsceneTimelineBehaviour fadeToBlackTimeline;
[Header("Automatic Fade")]
public bool autoStartSceneWithFadeFromBlack;
[Header("Events")]
public UnityEvent fadeFromBlackFinishedEvent;
public UnityEvent fadeToBlackFinishedEvent;
void Start()
{
if(autoStartSceneWithFadeFromBlack)
{
StartFadeFromBlack();
}
}
// フェード開始
public void StartFadeFromBlack()
{
fadeFromBlackTimeline.StartTimeline();
}
public void StartFadeToBlack()
{
fadeToBlackTimeline.StartTimeline();
}
// フェード終了
public void FadeFromBlackFinished()
{
fadeFromBlackFinishedEvent.Invoke();
}
public void FadeToBlackFinished()
{
fadeToBlackFinishedEvent.Invoke();
}
}
タイムラインアセットは
- Activation : タイムラインが終了した時のアクティブ状態を設定
- Fader : フェードアニメーションを行う
を持っています
Playableはタイムラインアセットをスクリプトから再生させる機能を持つ事がわかりました
Playableが持つ各プロパティ
- Playable 再生するタイムラインアセット
- UpdateMethod タイムラインの更新タイミングを指定
- DSP: digital signal processing DSPクロックと同期する。オーディオと同期する必要がある場合にこれを利用すると良いそうです
- GameTime: ゲームクロックと同期。(つまり deltaTime)
- Unscaled Game Time: ゲームクロックと動機だがタイムスケールの影響は受けない (つまり UnscaledDeltaTime)
- Manual: スクリプトで手動更新する場合
- Play on Awake
- シーン再生時にすぐに再生させる場合にチェックを付ける
- Wrap Mode
- Hold: 1度だけ再生。最後のフレームで止まる
- Loop: ループ再生
- None: 一度だけ再生。終了後再生前にリセットされる
- Initial TIme 開始までの時間を指定(秒) Playを呼び出してから実際にアニメーションが開始されるまでの時間を指定可能。
- CurrentTime 現在の経過時間
- Bindings
- Trackにどのゲームオブジェクトを紐付けるか決定。今回ではフェード対象とアクティブ対象のGameObject指定。